package com.study4j.crontab.service;

import java.util.List;
import java.util.Map;

import org.quartz.Job;

import com.study4j.crontab.model.CrontabVO;

/**
 * @description 定时任务service接口
 * @author Jiangbin
 * @date 2019年7月25日 下午3:11:42
 * @version 1.0.0
 */
public interface IQuartzJobManagerService {

	/**
	 * @description 创建job
	 * @param job          任务类
	 * @param jobName        任务名称
	 * @param jobGroupName   任务所在组名称
	 * @param cronExpression cron表达式
	 */
	public void addJob(Job job, String jobName, String jobGroupName, String cronExpression);

	/**
	 * @description 创建job，可传参
	 * @param job          任务类
	 * @param jobName        任务名称
	 * @param jobGroupName   任务所在组名称
	 * @param cronExpression cron表达式
	 * @param argMap         map形式参数
	 */
	public void addJob(Job job, String jobName, String jobGroupName, String cronExpression,
			Map<String, Object> argMap);

	/**
	 * @description 暂停job
	 * @param jobName      任务名称
	 * @param jobGroupName 任务所在组名称
	 */
	public void pauseJob(String jobName, String jobGroupName);

	/**
	 * @description 恢复job
	 * @param jobName      任务名称
	 * @param jobGroupName 任务所在组名称
	 */
	public void resumeJob(String jobName, String jobGroupName);

	/**
	 * @description job 更新,只更新频率
	 * @param jobName        任务名称
	 * @param jobGroupName   任务所在组名称
	 * @param cronExpression cron表达式
	 */
	public void updateJob(String jobName, String jobGroupName, String cronExpression);

	/**
	 * @description job 更新,更新频率和参数
	 * @param jobName        任务名称
	 * @param jobGroupName   任务所在组名称
	 * @param cronExpression cron表达式
	 * @param argMap         参数
	 */
	public void updateJob(String jobName, String jobGroupName, String cronExpression, Map<String, Object> argMap);

	/**
	 * @description job 更新,只更新更新参数
	 * @param jobName      任务名称
	 * @param jobGroupName 任务所在组名称
	 * @param argMap       参数
	 */
	public void updateJob(String jobName, String jobGroupName, Map<String, Object> argMap);

	/**
	 * @description job 删除
	 * @param jobName      任务名称
	 * @param jobGroupName 任务所在组名称
	 */
	public void deleteJob(String jobName, String jobGroupName);

	/**
	 * @description 启动所有定时任务
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:28:26
	 */
	public void startAllJobs();

	/**
	 * @description 关闭所有定时任务
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:28:37
	 */
	public void shutdownAllJobs();

	/**
	 * @description 获取所有任务列表
	 * @return
	 * @author Jiangbin
	 * @date 2019年7月28日 下午9:28:51
	 */
	public List<Map<String, Object>> getAllJob();

	/** 
	 * @description 创建job
	 * @param crontabVO
	 * @author Jiangbin
	 * @date 2019年7月29日 上午9:53:22
	 */
	void addJob(CrontabVO crontabVO);

	/** 
	 * @description 更新定时任务
	 * @param crontabVO
	 * @author Jiangbin
	 * @date 2019年7月29日 上午10:02:17
	 */
	void updateJob(CrontabVO crontabVO);

}
